<?php
declare(strict_types=1);

/*
 * 本文件由 秋枫雁飞 编写，所有解释权归Aiweline所有。
 * 作者：Administrator
 * 邮箱：aiweline@qq.com
 * 网址：aiweline.com
 * 论坛：https://bbs.aiweline.com
 * 日期：5/3/2024 11:21:18
 */

namespace Weline\FileManager\Helper;

class MimeTypes
{
// I made this array by joining all the following lists + .php extension which is missing in all of them.
// please contribute to this list to make it as accurate and complete as possible.
// https://gist.github.com/plasticbrain/3887245
// http://pastie.org/5668002
// http://pastebin.com/iuTy6K6d
// total: 1223 extensions as of 16 November 2015
    private static array $mime_types = array(
        '3dm' => array('x-world/x-3dmf'),
        '3dmf' => array('x-world/x-3dmf'),
        '3dml' => array('text/vnd.in3d.3dml'),
        '3ds' => array('image/x-3ds'),
        '3g2' => array('video/3gpp2'),
        '3gp' => array('video/3gpp'),
        '7z' => array('application/x-7z-compressed'),
        'a' => array('application/octet-stream'),
        'aab' => array('application/x-authorware-bin'),
        'aac' => array('audio/x-aac'),
        'aam' => array('application/x-authorware-map'),
        'aas' => array('application/x-authorware-seg'),
        'abc' => array('text/vnd.abc'),
        'abw' => array('application/x-abiword'),
        'ac' => array('application/pkix-attr-cert'),
        'acc' => array('application/vnd.americandynamics.acc'),
        'ace' => array('application/x-ace-compressed'),
        'acgi' => array('text/html'),
        'acu' => array('application/vnd.acucobol'),
        'acutc' => array('application/vnd.acucorp'),
        'adp' => array('audio/adpcm'),
        'aep' => array('application/vnd.audiograph'),
        'afl' => array('video/animaflex'),
        'afm' => array('application/x-font-type1'),
        'afp' => array('application/vnd.ibm.modcap'),
        'ahead' => array('application/vnd.ahead.space'),
        'ai' => array('application/postscript'),
        'aif' => array('audio/aiff', 'audio/x-aiff'),
        'aifc' => array('audio/aiff', 'audio/x-aiff'),
        'aiff' => array('audio/aiff', 'audio/x-aiff'),
        'aim' => array('application/x-aim'),
        'aip' => array('text/x-audiosoft-intra'),
        'air' => array('application/vnd.adobe.air-application-installer-package+zip'),
        'ait' => array('application/vnd.dvb.ait'),
        'ami' => array('application/vnd.amiga.ami'),
        'ani' => array('application/x-navi-animation'),
        'aos' => array('application/x-nokia-9000-communicator-add-on-software'),
        'apk' => array('application/vnd.android.package-archive'),
        'appcache' => array('text/cache-manifest'),
        'application' => array('application/x-ms-application'),
        'apr' => array('application/vnd.lotus-approach'),
        'aps' => array('application/mime'),
        'arc' => array('application/x-freearc'),
        'arj' => array('application/arj', 'application/octet-stream'),
        'art' => array('image/x-jg'),
        'asc' => array('application/pgp-signature'),
        'asf' => array('video/x-ms-asf'),
        'asm' => array('text/x-asm'),
        'aso' => array('application/vnd.accpac.simply.aso'),
        'asp' => array('text/asp'),
        'asx' => array('application/x-mplayer2', 'video/x-ms-asf', 'video/x-ms-asf-plugin'),
        'atc' => array('application/vnd.acucorp'),
        'atom' => array('application/atom+xml'),
        'atomcat' => array('application/atomcat+xml'),
        'atomsvc' => array('application/atomsvc+xml'),
        'atx' => array('application/vnd.antix.game-component'),
        'au' => array('audio/basic'),
        'avi' => array('application/x-troff-msvideo', 'video/avi', 'video/msvideo', 'video/x-msvideo'),
        'avs' => array('video/avs-video'),
        'aw' => array('application/applixware'),
        'azf' => array('application/vnd.airzip.filesecure.azf'),
        'azs' => array('application/vnd.airzip.filesecure.azs'),
        'azw' => array('application/vnd.amazon.ebook'),
        'bat' => array('application/x-msdownload'),
        'bcpio' => array('application/x-bcpio'),
        'bdf' => array('application/x-font-bdf'),
        'bdm' => array('application/vnd.syncml.dm+wbxml'),
        'bed' => array('application/vnd.realvnc.bed'),
        'bh2' => array('application/vnd.fujitsu.oasysprs'),
        'bin' => array('application/mac-binary', 'application/macbinary', 'application/octet-stream', 'application/x-binary', 'application/x-macbinary'),
        'blb' => array('application/x-blorb'),
        'blorb' => array('application/x-blorb'),
        'bm' => array('image/bmp'),
        'bmi' => array('application/vnd.bmi'),
        'bmp' => array('image/bmp', 'image/x-windows-bmp'),
        'boo' => array('application/book'),
        'book' => array('application/vnd.framemaker'),
        'box' => array('application/vnd.previewsystems.box'),
        'boz' => array('application/x-bzip2'),
        'bpk' => array('application/octet-stream'),
        'bsh' => array('application/x-bsh'),
        'btif' => array('image/prs.btif'),
        'buffer' => array('application/octet-stream'),
        'bz' => array('application/x-bzip'),
        'bz2' => array('application/x-bzip2'),
        'c' => array('text/x-c'),
        'c++' => array('text/plain'),
        'c11amc' => array('application/vnd.cluetrust.cartomobile-config'),
        'c11amz' => array('application/vnd.cluetrust.cartomobile-config-pkg'),
        'c4d' => array('application/vnd.clonk.c4group'),
        'c4f' => array('application/vnd.clonk.c4group'),
        'c4g' => array('application/vnd.clonk.c4group'),
        'c4p' => array('application/vnd.clonk.c4group'),
        'c4u' => array('application/vnd.clonk.c4group'),
        'cab' => array('application/vnd.ms-cab-compressed'),
        'caf' => array('audio/x-caf'),
        'cap' => array('application/vnd.tcpdump.pcap'),
        'car' => array('application/vnd.curl.car'),
        'cat' => array('application/vnd.ms-pki.seccat'),
        'cb7' => array('application/x-cbr'),
        'cba' => array('application/x-cbr'),
        'cbr' => array('application/x-cbr'),
        'cbt' => array('application/x-cbr'),
        'cbz' => array('application/x-cbr'),
        'cc' => array('text/plain', 'text/x-c'),
        'ccad' => array('application/clariscad'),
        'cco' => array('application/x-cocoa'),
        'cct' => array('application/x-director'),
        'ccxml' => array('application/ccxml+xml'),
        'cdbcmsg' => array('application/vnd.contact.cmsg'),
        'cdf' => array('application/cdf', 'application/x-cdf', 'application/x-netcdf'),
        'cdkey' => array('application/vnd.mediastation.cdkey'),
        'cdmia' => array('application/cdmi-capability'),
        'cdmic' => array('application/cdmi-container'),
        'cdmid' => array('application/cdmi-domain'),
        'cdmio' => array('application/cdmi-object'),
        'cdmiq' => array('application/cdmi-queue'),
        'cdx' => array('chemical/x-cdx'),
        'cdxml' => array('application/vnd.chemdraw+xml'),
        'cdy' => array('application/vnd.cinderella'),
        'cer' => array('application/pkix-cert', 'application/x-x509-ca-cert'),
        'cfs' => array('application/x-cfs-compressed'),
        'cgm' => array('image/cgm'),
        'cha' => array('application/x-chat'),
        'chat' => array('application/x-chat'),
        'chm' => array('application/vnd.ms-htmlhelp'),
        'chrt' => array('application/vnd.kde.kchart'),
        'cif' => array('chemical/x-cif'),
        'cii' => array('application/vnd.anser-web-certificate-issue-initiation'),
        'cil' => array('application/vnd.ms-artgalry'),
        'cla' => array('application/vnd.claymore'),
        'class' => array('application/java', 'application/java-byte-code', 'application/x-java-class'),
        'clkk' => array('application/vnd.crick.clicker.keyboard'),
        'clkp' => array('application/vnd.crick.clicker.palette'),
        'clkt' => array('application/vnd.crick.clicker.template'),
        'clkw' => array('application/vnd.crick.clicker.wordbank'),
        'clkx' => array('application/vnd.crick.clicker'),
        'clp' => array('application/x-msclip'),
        'cmc' => array('application/vnd.cosmocaller'),
        'cmdf' => array('chemical/x-cmdf'),
        'cml' => array('chemical/x-cml'),
        'cmp' => array('application/vnd.yellowriver-custom-menu'),
        'cmx' => array('image/x-cmx'),
        'cod' => array('application/vnd.rim.cod'),
        'com' => array('application/octet-stream', 'text/plain'),
        'conf' => array('text/plain'),
        'cpio' => array('application/x-cpio'),
        'cpp' => array('text/x-c'),
        'cpt' => array('application/x-compactpro', 'application/x-cpt'),
        'crd' => array('application/x-mscardfile'),
        'crl' => array('application/pkcs-crl', 'application/pkix-crl'),
        'crt' => array('application/pkix-cert', 'application/x-x509-ca-cert', 'application/x-x509-user-cert'),
        'crx' => array('application/x-chrome-extension'),
        'cryptonote' => array('application/vnd.rig.cryptonote'),
        'csh' => array('application/x-csh', 'text/x-script.csh'),
        'csml' => array('chemical/x-csml'),
        'csp' => array('application/vnd.commonspace'),
        'css' => array('application/x-pointplus', 'text/css'),
        'cst' => array('application/x-director'),
        'csv' => array('text/csv'),
        'cu' => array('application/cu-seeme'),
        'curl' => array('text/vnd.curl'),
        'cww' => array('application/prs.cww'),
        'cxt' => array('application/x-director'),
        'cxx' => array('text/x-c'),
        'dae' => array('model/vnd.collada+xml'),
        'daf' => array('application/vnd.mobius.daf'),
        'dart' => array('application/vnd.dart'),
        'dataless' => array('application/vnd.fdsn.seed'),
        'davmount' => array('application/davmount+xml'),
        'dbk' => array('application/docbook+xml'),
        'dcr' => array('application/x-director'),
        'dcurl' => array('text/vnd.curl.dcurl'),
        'dd2' => array('application/vnd.oma.dd2+xml'),
        'ddd' => array('application/vnd.fujixerox.ddd'),
        'deb' => array('application/x-debian-package'),
        'deepv' => array('application/x-deepv'),
        'def' => array('text/plain'),
        'deploy' => array('application/octet-stream'),
        'der' => array('application/x-x509-ca-cert'),
        'dfac' => array('application/vnd.dreamfactory'),
        'dgc' => array('application/x-dgc-compressed'),
        'dic' => array('text/x-c'),
        'dif' => array('video/x-dv'),
        'diff' => array('text/plain'),
        'dir' => array('application/x-director'),
        'dis' => array('application/vnd.mobius.dis'),
        'dist' => array('application/octet-stream'),
        'distz' => array('application/octet-stream'),
        'djv' => array('image/vnd.djvu'),
        'djvu' => array('image/vnd.djvu'),
        'dl' => array('video/dl', 'video/x-dl'),
        'dll' => array('application/x-msdownload'),
        'dmg' => array('application/x-apple-diskimage'),
        'dmp' => array('application/vnd.tcpdump.pcap'),
        'dms' => array('application/octet-stream'),
        'dna' => array('application/vnd.dna'),
        'doc' => array('application/msword'),
        'docm' => array('application/vnd.ms-word.document.macroenabled.12'),
        'docx' => array('application/vnd.openxmlformats-officedocument.wordprocessingml.document'),
        'dot' => array('application/msword'),
        'dotm' => array('application/vnd.ms-word.template.macroenabled.12'),
        'dotx' => array('application/vnd.openxmlformats-officedocument.wordprocessingml.template'),
        'dp' => array('application/vnd.osgi.dp'),
        'dpg' => array('application/vnd.dpgraph'),
        'dra' => array('audio/vnd.dra'),
        'drw' => array('application/drafting'),
        'dsc' => array('text/prs.lines.tag'),
        'dssc' => array('application/dssc+der'),
        'dtb' => array('application/x-dtbook+xml'),
        'dtd' => array('application/xml-dtd'),
        'dts' => array('audio/vnd.dts'),
        'dtshd' => array('audio/vnd.dts.hd'),
        'dump' => array('application/octet-stream'),
        'dv' => array('video/x-dv'),
        'dvb' => array('video/vnd.dvb.file'),
        'dvi' => array('application/x-dvi'),
        'dwf' => array('drawing/x-dwf (old)', 'model/vnd.dwf'),
        'dwg' => array('application/acad', 'image/vnd.dwg', 'image/x-dwg'),
        'dxf' => array('image/vnd.dxf'),
        'dxp' => array('application/vnd.spotfire.dxp'),
        'dxr' => array('application/x-director'),
        'ecelp4800' => array('audio/vnd.nuera.ecelp4800'),
        'ecelp7470' => array('audio/vnd.nuera.ecelp7470'),
        'ecelp9600' => array('audio/vnd.nuera.ecelp9600'),
        'ecma' => array('application/ecmascript'),
        'edm' => array('application/vnd.novadigm.edm'),
        'edx' => array('application/vnd.novadigm.edx'),
        'efif' => array('application/vnd.picsel'),
        'ei6' => array('application/vnd.pg.osasli'),
        'el' => array('text/x-script.elisp'),
        'elc' => array('application/x-bytecode.elisp (compiled elisp)', 'application/x-elc'),
        'emf' => array('application/x-msmetafile'),
        'eml' => array('message/rfc822'),
        'emma' => array('application/emma+xml'),
        'emz' => array('application/x-msmetafile'),
        'env' => array('application/x-envoy'),
        'eol' => array('audio/vnd.digital-winds'),
        'eot' => array('application/vnd.ms-fontobject'),
        'eps' => array('application/postscript'),
        'epub' => array('application/epub+zip'),
        'es' => array('application/x-esrehber'),
        'es3' => array('application/vnd.eszigno3+xml'),
        'esa' => array('application/vnd.osgi.subsystem'),
        'esf' => array('application/vnd.epson.esf'),
        'et3' => array('application/vnd.eszigno3+xml'),
        'etx' => array('text/x-setext'),
        'eva' => array('application/x-eva'),
        'event-stream' => array('text/event-stream'),
        'evy' => array('application/envoy', 'application/x-envoy'),
        'exe' => array('application/x-msdownload', 'application/x-dosexec'),
        'exi' => array('application/exi'),
        'ext' => array('application/vnd.novadigm.ext'),
        'ez' => array('application/andrew-inset'),
        'ez2' => array('application/vnd.ezpix-album'),
        'ez3' => array('application/vnd.ezpix-package'),
        'f' => array('text/plain', 'text/x-fortran'),
        'f4v' => array('video/x-f4v'),
        'f77' => array('text/x-fortran'),
        'f90' => array('text/plain', 'text/x-fortran'),
        'fbs' => array('image/vnd.fastbidsheet'),
        'fcdt' => array('application/vnd.adobe.formscentral.fcdt'),
        'fcs' => array('application/vnd.isac.fcs'),
        'fdf' => array('application/vnd.fdf'),
        'fe_launch' => array('application/vnd.denovo.fcselayout-link'),
        'fg5' => array('application/vnd.fujitsu.oasysgp'),
        'fgd' => array('application/x-director'),
        'fh' => array('image/x-freehand'),
        'fh4' => array('image/x-freehand'),
        'fh5' => array('image/x-freehand'),
        'fh7' => array('image/x-freehand'),
        'fhc' => array('image/x-freehand'),
        'fif' => array('application/fractals', 'image/fif'),
        'fig' => array('application/x-xfig'),
        'flac' => array('audio/flac'),
        'fli' => array('video/fli', 'video/x-fli'),
        'flo' => array('application/vnd.micrografx.flo'),
        'flv' => array('video/x-flv'),
        'flw' => array('application/vnd.kde.kivio'),
        'flx' => array('text/vnd.fmi.flexstor'),
        'fly' => array('text/vnd.fly'),
        'fm' => array('application/vnd.framemaker'),
        'fmf' => array('video/x-atomic3d-feature'),
        'fnc' => array('application/vnd.frogans.fnc'),
        'for' => array('text/plain', 'text/x-fortran'),
        'fpx' => array('image/vnd.fpx', 'image/vnd.net-fpx'),
        'frame' => array('application/vnd.framemaker'),
        'frl' => array('application/freeloader'),
        'fsc' => array('application/vnd.fsc.weblaunch'),
        'fst' => array('image/vnd.fst'),
        'ftc' => array('application/vnd.fluxtime.clip'),
        'fti' => array('application/vnd.anser-web-funds-transfer-initiation'),
        'funk' => array('audio/make'),
        'fvt' => array('video/vnd.fvt'),
        'fxp' => array('application/vnd.adobe.fxp'),
        'fxpl' => array('application/vnd.adobe.fxp'),
        'fzs' => array('application/vnd.fuzzysheet'),
        'g' => array('text/plain'),
        'g2w' => array('application/vnd.geoplan'),
        'g3' => array('image/g3fax'),
        'g3w' => array('application/vnd.geospace'),
        'gac' => array('application/vnd.groove-account'),
        'gam' => array('application/x-tads'),
        'gbr' => array('application/rpki-ghostbusters'),
        'gca' => array('application/x-gca-compressed'),
        'gdl' => array('model/vnd.gdl'),
        'geo' => array('application/vnd.dynageo'),
        'gex' => array('application/vnd.geometry-explorer'),
        'ggb' => array('application/vnd.geogebra.file'),
        'ggt' => array('application/vnd.geogebra.tool'),
        'ghf' => array('application/vnd.groove-help'),
        'gif' => array('image/gif'),
        'gim' => array('application/vnd.groove-identity-message'),
        'gl' => array('video/gl', 'video/x-gl'),
        'gml' => array('application/gml+xml'),
        'gmx' => array('application/vnd.gmx'),
        'gnumeric' => array('application/x-gnumeric'),
        'gph' => array('application/vnd.flographit'),
        'gpx' => array('application/gpx+xml'),
        'gqf' => array('application/vnd.grafeq'),
        'gqs' => array('application/vnd.grafeq'),
        'gram' => array('application/srgs'),
        'gramps' => array('application/x-gramps-xml'),
        'gre' => array('application/vnd.geometry-explorer'),
        'grv' => array('application/vnd.groove-injector'),
        'grxml' => array('application/srgs+xml'),
        'gsd' => array('audio/x-gsm'),
        'gsf' => array('application/x-font-ghostscript'),
        'gsm' => array('audio/x-gsm'),
        'gsp' => array('application/x-gsp'),
        'gss' => array('application/x-gss'),
        'gtar' => array('application/x-gtar'),
        'gtm' => array('application/vnd.groove-tool-message'),
        'gtw' => array('model/vnd.gtw'),
        'gv' => array('text/vnd.graphviz'),
        'gxf' => array('application/gxf'),
        'gxt' => array('application/vnd.geonext'),
        'gz' => array('application/x-compressed', 'application/x-gzip'),
        'gzip' => array('application/x-gzip', 'multipart/x-gzip'),
        'h' => array('text/plain', 'text/x-h'),
        'h261' => array('video/h261'),
        'h263' => array('video/h263'),
        'h264' => array('video/h264'),
        'hal' => array('application/vnd.hal+xml'),
        'hbci' => array('application/vnd.hbci'),
        'hdf' => array('application/x-hdf'),
        'help' => array('application/x-helpfile'),
        'hgl' => array('application/vnd.hp-hpgl'),
        'hh' => array('text/plain', 'text/x-h'),
        'hlb' => array('text/x-script'),
        'hlp' => array('application/hlp', 'application/x-helpfile', 'application/x-winhelp'),
        'hpg' => array('application/vnd.hp-hpgl'),
        'hpgl' => array('application/vnd.hp-hpgl'),
        'hpid' => array('application/vnd.hp-hpid'),
        'hps' => array('application/vnd.hp-hps'),
        'hqx' => array('application/binhex', 'application/binhex4', 'application/mac-binhex', 'application/mac-binhex40', 'application/x-binhex40', 'application/x-mac-binhex40'),
        'hta' => array('application/hta'),
        'htc' => array('text/x-component'),
        'htke' => array('application/vnd.kenameaapp'),
        'htm' => array('text/html'),
        'html' => array('text/html'),
        'htmls' => array('text/html'),
        'htt' => array('text/webviewhtml'),
        'htx' => array('text/html'),
        'hvd' => array('application/vnd.yamaha.hv-dic'),
        'hvp' => array('application/vnd.yamaha.hv-voice'),
        'hvs' => array('application/vnd.yamaha.hv-script'),
        'i2g' => array('application/vnd.intergeo'),
        'icc' => array('application/vnd.iccprofile'),
        'ice' => array('x-conference/x-cooltalk'),
        'icm' => array('application/vnd.iccprofile'),
        'ico' => array('image/x-icon'),
        'ics' => array('text/calendar'),
        'idc' => array('text/plain'),
        'ief' => array('image/ief'),
        'iefs' => array('image/ief'),
        'ifb' => array('text/calendar'),
        'ifm' => array('application/vnd.shana.informed.formdata'),
        'iges' => array('application/iges', 'model/iges'),
        'igl' => array('application/vnd.igloader'),
        'igm' => array('application/vnd.insors.igm'),
        'igs' => array('application/iges', 'model/iges'),
        'igx' => array('application/vnd.micrografx.igx'),
        'iif' => array('application/vnd.shana.informed.interchange'),
        'ima' => array('application/x-ima'),
        'imap' => array('application/x-httpd-imap'),
        'imp' => array('application/vnd.accpac.simply.imp'),
        'ims' => array('application/vnd.ms-ims'),
        'in' => array('text/plain'),
        'inf' => array('application/inf'),
        'ink' => array('application/inkml+xml'),
        'inkml' => array('application/inkml+xml'),
        'ins' => array('application/x-internett-signup'),
        'install' => array('application/x-install-instructions'),
        'iota' => array('application/vnd.astraea-software.iota'),
        'ip' => array('application/x-ip2'),
        'ipfix' => array('application/ipfix'),
        'ipk' => array('application/vnd.shana.informed.package'),
        'irm' => array('application/vnd.ibm.rights-management'),
        'irp' => array('application/vnd.irepository.package+xml'),
        'iso' => array('application/x-iso9660-image'),
        'isu' => array('video/x-isvideo'),
        'it' => array('audio/it'),
        'itp' => array('application/vnd.shana.informed.formtemplate'),
        'iv' => array('application/x-inventor'),
        'ivp' => array('application/vnd.immervision-ivp'),
        'ivr' => array('i-world/i-vrml'),
        'ivu' => array('application/vnd.immervision-ivu'),
        'ivy' => array('application/x-livescreen'),
        'jad' => array('text/vnd.sun.j2me.app-descriptor'),
        'jam' => array('application/vnd.jam'),
        'jar' => array('application/java-archive'),
        'jav' => array('text/plain', 'text/x-java-source'),
        'java' => array('text/plain', 'text/x-java-source'),
        'jcm' => array('application/x-java-commerce'),
        'jfif' => array('image/jpeg', 'image/pjpeg'),
        'jfif-tbnl' => array('image/jpeg'),
        'jisp' => array('application/vnd.jisp'),
        'jlt' => array('application/vnd.hp-jlyt'),
        'jnlp' => array('application/x-java-jnlp-file'),
        'joda' => array('application/vnd.joost.joda-archive'),
        'jpe' => array('image/jpeg', 'image/pjpeg'),
        'jpeg' => array('image/jpeg', 'image/pjpeg'),
        'jpg' => array('image/jpeg', 'image/pjpeg'),
        'jpgm' => array('video/jpm'),
        'jpgv' => array('video/jpeg'),
        'jpm' => array('video/jpm'),
        'jps' => array('image/x-jps'),
        'js' => array('application/javascript'),
        'json' => array('application/json', 'text/plain'),
        'jsonml' => array('application/jsonml+json'),
        'jut' => array('image/jutvision'),
        'kar' => array('audio/midi', 'music/x-karaoke'),
        'karbon' => array('application/vnd.kde.karbon'),
        'kfo' => array('application/vnd.kde.kformula'),
        'kia' => array('application/vnd.kidspiration'),
        'kil' => array('application/x-killustrator'),
        'kml' => array('application/vnd.google-earth.kml+xml'),
        'kmz' => array('application/vnd.google-earth.kmz'),
        'kne' => array('application/vnd.kinar'),
        'knp' => array('application/vnd.kinar'),
        'kon' => array('application/vnd.kde.kontour'),
        'kpr' => array('application/vnd.kde.kpresenter'),
        'kpt' => array('application/vnd.kde.kpresenter'),
        'kpxx' => array('application/vnd.ds-keypoint'),
        'ksh' => array('application/x-ksh', 'text/x-script.ksh'),
        'ksp' => array('application/vnd.kde.kspread'),
        'ktr' => array('application/vnd.kahootz'),
        'ktx' => array('image/ktx'),
        'ktz' => array('application/vnd.kahootz'),
        'kwd' => array('application/vnd.kde.kword'),
        'kwt' => array('application/vnd.kde.kword'),
        'la' => array('audio/nspaudio', 'audio/x-nspaudio'),
        'lam' => array('audio/x-liveaudio'),
        'lasxml' => array('application/vnd.las.las+xml'),
        'latex' => array('application/x-latex'),
        'lbd' => array('application/vnd.llamagraphics.life-balance.desktop'),
        'lbe' => array('application/vnd.llamagraphics.life-balance.exchange+xml'),
        'les' => array('application/vnd.hhe.lesson-player'),
        'lha' => array('application/lha', 'application/octet-stream', 'application/x-lha'),
        'lhx' => array('application/octet-stream'),
        'link66' => array('application/vnd.route66.link66+xml'),
        'list' => array('text/plain'),
        'list3820' => array('application/vnd.ibm.modcap'),
        'listafp' => array('application/vnd.ibm.modcap'),
        'lma' => array('audio/nspaudio', 'audio/x-nspaudio'),
        'lnk' => array('application/x-ms-shortcut'),
        'log' => array('text/plain'),
        'lostxml' => array('application/lost+xml'),
        'lrf' => array('application/octet-stream'),
        'lrm' => array('application/vnd.ms-lrm'),
        'lsp' => array('application/x-lisp', 'text/x-script.lisp'),
        'lst' => array('text/plain'),
        'lsx' => array('text/x-la-asf'),
        'ltf' => array('application/vnd.frogans.ltf'),
        'ltx' => array('application/x-latex'),
        'lua' => array('text/x-lua'),
        'luac' => array('application/x-lua-bytecode'),
        'lvp' => array('audio/vnd.lucent.voice'),
        'lwp' => array('application/vnd.lotus-wordpro'),
        'lzh' => array('application/octet-stream', 'application/x-lzh'),
        'lzx' => array('application/lzx', 'application/octet-stream', 'application/x-lzx'),
        'm' => array('text/plain', 'text/x-m'),
        'm13' => array('application/x-msmediaview'),
        'm14' => array('application/x-msmediaview'),
        'm1v' => array('video/mpeg'),
        'm21' => array('application/mp21'),
        'm2a' => array('audio/mpeg'),
        'm2v' => array('video/mpeg'),
        'm3a' => array('audio/mpeg'),
        'm3u' => array('audio/x-mpegurl'),
        'm3u8' => array('application/x-mpegURL'),
        'm4a' => array('audio/mp4'),
        'm4p' => array('application/mp4'),
        'm4u' => array('video/vnd.mpegurl'),
        'm4v' => array('video/x-m4v'),
        'ma' => array('application/mathematica'),
        'mads' => array('application/mads+xml'),
        'mag' => array('application/vnd.ecowin.chart'),
        'maker' => array('application/vnd.framemaker'),
        'man' => array('text/troff'),
        'manifest' => array('text/cache-manifest'),
        'map' => array('application/x-navimap'),
        'mar' => array('application/octet-stream'),
        'markdown' => array('text/x-markdown'),
        'mathml' => array('application/mathml+xml'),
        'mb' => array('application/mathematica'),
        'mbd' => array('application/mbedlet'),
        'mbk' => array('application/vnd.mobius.mbk'),
        'mbox' => array('application/mbox'),
        'mc' => array('application/x-magic-cap-package-1.0'),
        'mc1' => array('application/vnd.medcalcdata'),
        'mcd' => array('application/mcad', 'application/x-mathcad'),
        'mcf' => array('image/vasa', 'text/mcf'),
        'mcp' => array('application/netmc'),
        'mcurl' => array('text/vnd.curl.mcurl'),
        'md' => array('text/x-markdown'),
        'mdb' => array('application/x-msaccess'),
        'mdi' => array('image/vnd.ms-modi'),
        'me' => array('text/troff'),
        'mesh' => array('model/mesh'),
        'meta4' => array('application/metalink4+xml'),
        'metalink' => array('application/metalink+xml'),
        'mets' => array('application/mets+xml'),
        'mfm' => array('application/vnd.mfmp'),
        'mft' => array('application/rpki-manifest'),
        'mgp' => array('application/vnd.osgeo.mapguide.package'),
        'mgz' => array('application/vnd.proteus.magazine'),
        'mht' => array('message/rfc822'),
        'mhtml' => array('message/rfc822'),
        'mid' => array('application/x-midi', 'audio/midi', 'audio/x-mid', 'audio/x-midi', 'music/crescendo', 'x-music/x-midi'),
        'midi' => array('application/x-midi', 'audio/midi', 'audio/x-mid', 'audio/x-midi', 'music/crescendo', 'x-music/x-midi'),
        'mie' => array('application/x-mie'),
        'mif' => array('application/x-frame', 'application/x-mif'),
        'mime' => array('message/rfc822', 'www/mime'),
        'mj2' => array('video/mj2'),
        'mjf' => array('audio/x-vnd.audioexplosion.mjuicemediafile'),
        'mjp2' => array('video/mj2'),
        'mjpg' => array('video/x-motion-jpeg'),
        'mk3d' => array('video/x-matroska'),
        'mka' => array('audio/x-matroska'),
        'mkd' => array('text/x-markdown'),
        'mks' => array('video/x-matroska'),
        'mkv' => array('video/x-matroska'),
        'mlp' => array('application/vnd.dolby.mlp'),
        'mm' => array('application/base64', 'application/x-meme'),
        'mmd' => array('application/vnd.chipnuts.karaoke-mmd'),
        'mme' => array('application/base64'),
        'mmf' => array('application/vnd.smaf'),
        'mmr' => array('image/vnd.fujixerox.edmics-mmr'),
        'mng' => array('video/x-mng'),
        'mny' => array('application/x-msmoney'),
        'mobi' => array('application/x-mobipocket-ebook'),
        'mod' => array('audio/mod', 'audio/x-mod'),
        'mods' => array('application/mods+xml'),
        'moov' => array('video/quicktime'),
        'mov' => array('video/quicktime'),
        'movie' => array('video/x-sgi-movie'),
        'mp2' => array('audio/mpeg', 'audio/x-mpeg', 'video/mpeg', 'video/x-mpeg', 'video/x-mpeq2a'),
        'mp21' => array('application/mp21'),
        'mp2a' => array('audio/mpeg'),
        'mp3' => array('audio/mpeg3', 'audio/x-mpeg-3', 'video/mpeg', 'video/x-mpeg'),
        'mp4' => array('video/mp4'),
        'mp4a' => array('audio/mp4'),
        'mp4s' => array('application/mp4'),
        'mp4v' => array('video/mp4'),
        'mpa' => array('audio/mpeg', 'video/mpeg'),
        'mpc' => array('application/vnd.mophun.certificate'),
        'mpe' => array('video/mpeg'),
        'mpeg' => array('video/mpeg'),
        'mpg' => array('audio/mpeg', 'video/mpeg'),
        'mpg4' => array('video/mp4'),
        'mpga' => array('audio/mpeg'),
        'mpkg' => array('application/vnd.apple.installer+xml'),
        'mpm' => array('application/vnd.blueice.multipass'),
        'mpn' => array('application/vnd.mophun.application'),
        'mpp' => array('application/vnd.ms-project'),
        'mpt' => array('application/vnd.ms-project'),
        'mpv' => array('application/x-project'),
        'mpx' => array('application/x-project'),
        'mpy' => array('application/vnd.ibm.minipay'),
        'mqy' => array('application/vnd.mobius.mqy'),
        'mrc' => array('application/marc'),
        'mrcx' => array('application/marcxml+xml'),
        'ms' => array('text/troff'),
        'mscml' => array('application/mediaservercontrol+xml'),
        'mseed' => array('application/vnd.fdsn.mseed'),
        'mseq' => array('application/vnd.mseq'),
        'msf' => array('application/vnd.epson.msf'),
        'msh' => array('model/mesh'),
        'msi' => array('application/x-msdownload'),
        'msl' => array('application/vnd.mobius.msl'),
        'msty' => array('application/vnd.muvee.style'),
        'mts' => array('model/vnd.mts'),
        'mus' => array('application/vnd.musician'),
        'musicxml' => array('application/vnd.recordare.musicxml+xml'),
        'mv' => array('video/x-sgi-movie'),
        'mvb' => array('application/x-msmediaview'),
        'mwf' => array('application/vnd.mfer'),
        'mxf' => array('application/mxf'),
        'mxl' => array('application/vnd.recordare.musicxml'),
        'mxml' => array('application/xv+xml'),
        'mxs' => array('application/vnd.triscape.mxs'),
        'mxu' => array('video/vnd.mpegurl'),
        'my' => array('audio/make'),
        'mzz' => array('application/x-vnd.audioexplosion.mzz'),
        'n-gage' => array('application/vnd.nokia.n-gage.symbian.install'),
        'n3' => array('text/n3'),
        'nap' => array('image/naplps'),
        'naplps' => array('image/naplps'),
        'nb' => array('application/mathematica'),
        'nbp' => array('application/vnd.wolfram.player'),
        'nc' => array('application/x-netcdf'),
        'ncm' => array('application/vnd.nokia.configuration-message'),
        'ncx' => array('application/x-dtbncx+xml'),
        'nfo' => array('text/x-nfo'),
        'ngdat' => array('application/vnd.nokia.n-gage.data'),
        'nif' => array('image/x-niff'),
        'niff' => array('image/x-niff'),
        'nitf' => array('application/vnd.nitf'),
        'nix' => array('application/x-mix-transfer'),
        'nlu' => array('application/vnd.neurolanguage.nlu'),
        'nml' => array('application/vnd.enliven'),
        'nnd' => array('application/vnd.noblenet-directory'),
        'nns' => array('application/vnd.noblenet-sealer'),
        'nnw' => array('application/vnd.noblenet-web'),
        'npx' => array('image/vnd.net-fpx'),
        'nsc' => array('application/x-conference'),
        'nsf' => array('application/vnd.lotus-notes'),
        'ntf' => array('application/vnd.nitf'),
        'nvd' => array('application/x-navidoc'),
        'nws' => array('message/rfc822'),
        'nzb' => array('application/x-nzb'),
        'o' => array('application/octet-stream'),
        'oa2' => array('application/vnd.fujitsu.oasys2'),
        'oa3' => array('application/vnd.fujitsu.oasys3'),
        'oas' => array('application/vnd.fujitsu.oasys'),
        'obd' => array('application/x-msbinder'),
        'obj' => array('application/x-tgif'),
        'oda' => array('application/oda'),
        'odb' => array('application/vnd.oasis.opendocument.database'),
        'odc' => array('application/vnd.oasis.opendocument.chart'),
        'odf' => array('application/vnd.oasis.opendocument.formula'),
        'odft' => array('application/vnd.oasis.opendocument.formula-template'),
        'odg' => array('application/vnd.oasis.opendocument.graphics'),
        'odi' => array('application/vnd.oasis.opendocument.image'),
        'odm' => array('application/vnd.oasis.opendocument.text-master'),
        'odp' => array('application/vnd.oasis.opendocument.presentation'),
        'ods' => array('application/vnd.oasis.opendocument.spreadsheet'),
        'odt' => array('application/vnd.oasis.opendocument.text'),
        'oga' => array('audio/ogg'),
        'ogg' => array('audio/ogg'),
        'ogv' => array('video/ogg'),
        'ogx' => array('application/ogg'),
        'omc' => array('application/x-omc'),
        'omcd' => array('application/x-omcdatamaker'),
        'omcr' => array('application/x-omcregerator'),
        'omdoc' => array('application/omdoc+xml'),
        'onepkg' => array('application/onenote'),
        'onetmp' => array('application/onenote'),
        'onetoc' => array('application/onenote'),
        'onetoc2' => array('application/onenote'),
        'opf' => array('application/oebps-package+xml'),
        'opml' => array('text/x-opml'),
        'oprc' => array('application/vnd.palm'),
        'org' => array('application/vnd.lotus-organizer'),
        'osf' => array('application/vnd.yamaha.openscoreformat'),
        'osfpvg' => array('application/vnd.yamaha.openscoreformat.osfpvg+xml'),
        'otc' => array('application/vnd.oasis.opendocument.chart-template'),
        'otf' => array('font/opentype'),
        'otg' => array('application/vnd.oasis.opendocument.graphics-template'),
        'oth' => array('application/vnd.oasis.opendocument.text-web'),
        'oti' => array('application/vnd.oasis.opendocument.image-template'),
        'otm' => array('application/vnd.oasis.opendocument.text-master'),
        'otp' => array('application/vnd.oasis.opendocument.presentation-template'),
        'ots' => array('application/vnd.oasis.opendocument.spreadsheet-template'),
        'ott' => array('application/vnd.oasis.opendocument.text-template'),
        'oxps' => array('application/oxps'),
        'oxt' => array('application/vnd.openofficeorg.extension'),
        'p' => array('text/x-pascal'),
        'p10' => array('application/pkcs10', 'application/x-pkcs10'),
        'p12' => array('application/pkcs-12', 'application/x-pkcs12'),
        'p7a' => array('application/x-pkcs7-signature'),
        'p7b' => array('application/x-pkcs7-certificates'),
        'p7c' => array('application/pkcs7-mime', 'application/x-pkcs7-mime'),
        'p7m' => array('application/pkcs7-mime', 'application/x-pkcs7-mime'),
        'p7r' => array('application/x-pkcs7-certreqresp'),
        'p7s' => array('application/pkcs7-signature'),
        'p8' => array('application/pkcs8'),
        'part' => array('application/pro_eng'),
        'pas' => array('text/x-pascal'),
        'paw' => array('application/vnd.pawaafile'),
        'pbd' => array('application/vnd.powerbuilder6'),
        'pbm' => array('image/x-portable-bitmap'),
        'pcap' => array('application/vnd.tcpdump.pcap'),
        'pcf' => array('application/x-font-pcf'),
        'pcl' => array('application/vnd.hp-pcl', 'application/x-pcl'),
        'pclxl' => array('application/vnd.hp-pclxl'),
        'pct' => array('image/x-pict'),
        'pcurl' => array('application/vnd.curl.pcurl'),
        'pcx' => array('image/x-pcx'),
        'pdb' => array('application/vnd.palm'),
        'pdf' => array('application/pdf'),
        'pfa' => array('application/x-font-type1'),
        'pfb' => array('application/x-font-type1'),
        'pfm' => array('application/x-font-type1'),
        'pfr' => array('application/font-tdpfr'),
        'pfunk' => array('audio/make'),
        'pfx' => array('application/x-pkcs12'),
        'pgm' => array('image/x-portable-graymap'),
        'pgn' => array('application/x-chess-pgn'),
        'pgp' => array('application/pgp-encrypted'),
        'php' => array('text/x-php'),
        'pic' => array('image/x-pict'),
        'pict' => array('image/pict'),
        'pkg' => array('application/octet-stream'),
        'pki' => array('application/pkixcmp'),
        'pkipath' => array('application/pkix-pkipath'),
        'pko' => array('application/vnd.ms-pki.pko'),
        'pl' => array('text/plain', 'text/x-script.perl'),
        'plb' => array('application/vnd.3gpp.pic-bw-large'),
        'plc' => array('application/vnd.mobius.plc'),
        'plf' => array('application/vnd.pocketlearn'),
        'pls' => array('application/pls+xml'),
        'plx' => array('application/x-pixclscript'),
        'pm' => array('image/x-xpixmap', 'text/x-script.perl-module'),
        'pm4' => array('application/x-pagemaker'),
        'pm5' => array('application/x-pagemaker'),
        'pml' => array('application/vnd.ctc-posml'),
        'png' => array('image/png'),
        'pnm' => array('application/x-portable-anymap', 'image/x-portable-anymap'),
        'portpkg' => array('application/vnd.macports.portpkg'),
        'pot' => array('application/mspowerpoint', 'application/vnd.ms-powerpoint'),
        'potm' => array('application/vnd.ms-powerpoint.template.macroenabled.12'),
        'potx' => array('application/vnd.openxmlformats-officedocument.presentationml.template'),
        'pov' => array('model/x-pov'),
        'ppa' => array('application/vnd.ms-powerpoint'),
        'ppam' => array('application/vnd.ms-powerpoint.addin.macroenabled.12'),
        'ppd' => array('application/vnd.cups-ppd'),
        'ppm' => array('image/x-portable-pixmap'),
        'pps' => array('application/mspowerpoint', 'application/vnd.ms-powerpoint'),
        'ppsm' => array('application/vnd.ms-powerpoint.slideshow.macroenabled.12'),
        'ppsx' => array('application/vnd.openxmlformats-officedocument.presentationml.slideshow'),
        'ppt' => array('application/mspowerpoint', 'application/powerpoint', 'application/vnd.ms-powerpoint', 'application/x-mspowerpoint'),
        'pptm' => array('application/vnd.ms-powerpoint.presentation.macroenabled.12'),
        'pptx' => array('application/vnd.openxmlformats-officedocument.presentationml.presentation'),
        'ppz' => array('application/mspowerpoint'),
        'pqa' => array('application/vnd.palm'),
        'prc' => array('application/x-mobipocket-ebook'),
        'pre' => array('application/vnd.lotus-freelance'),
        'prf' => array('application/pics-rules'),
        'prt' => array('application/pro_eng'),
        'ps' => array('application/postscript'),
        'psb' => array('application/vnd.3gpp.pic-bw-small'),
        'psd' => array('image/vnd.adobe.photoshop'),
        'psf' => array('application/x-font-linux-psf'),
        'pskcxml' => array('application/pskc+xml'),
        'ptid' => array('application/vnd.pvi.ptid1'),
        'pub' => array('application/x-mspublisher'),
        'pvb' => array('application/vnd.3gpp.pic-bw-var'),
        'pvu' => array('paleovu/x-pv'),
        'pwn' => array('application/vnd.3m.post-it-notes'),
        'pwz' => array('application/vnd.ms-powerpoint'),
        'py' => array('text/x-script.phyton'),
        'pya' => array('audio/vnd.ms-playready.media.pya'),
        'pyc' => array('applicaiton/x-bytecode.python'),
        'pyo' => array('application/x-python-code'),
        'pyv' => array('video/vnd.ms-playready.media.pyv'),
        'qam' => array('application/vnd.epson.quickanime'),
        'qbo' => array('application/vnd.intu.qbo'),
        'qcp' => array('audio/vnd.qcelp'),
        'qd3' => array('x-world/x-3dmf'),
        'qd3d' => array('x-world/x-3dmf'),
        'qfx' => array('application/vnd.intu.qfx'),
        'qif' => array('image/x-quicktime'),
        'qps' => array('application/vnd.publishare-delta-tree'),
        'qt' => array('video/quicktime'),
        'qtc' => array('video/x-qtc'),
        'qti' => array('image/x-quicktime'),
        'qtif' => array('image/x-quicktime'),
        'qwd' => array('application/vnd.quark.quarkxpress'),
        'qwt' => array('application/vnd.quark.quarkxpress'),
        'qxb' => array('application/vnd.quark.quarkxpress'),
        'qxd' => array('application/vnd.quark.quarkxpress'),
        'qxl' => array('application/vnd.quark.quarkxpress'),
        'qxt' => array('application/vnd.quark.quarkxpress'),
        'ra' => array('audio/x-pn-realaudio', 'audio/x-pn-realaudio-plugin', 'audio/x-realaudio'),
        'ram' => array('audio/x-pn-realaudio'),
        'rar' => array('application/x-rar-compressed'),
        'ras' => array('application/x-cmu-raster', 'image/cmu-raster', 'image/x-cmu-raster'),
        'rast' => array('image/cmu-raster'),
        'rcprofile' => array('application/vnd.ipunplugged.rcprofile'),
        'rdf' => array('application/rdf+xml'),
        'rdz' => array('application/vnd.data-vision.rdz'),
        'rep' => array('application/vnd.businessobjects'),
        'res' => array('application/x-dtbresource+xml'),
        'rexx' => array('text/x-script.rexx'),
        'rf' => array('image/vnd.rn-realflash'),
        'rgb' => array('image/x-rgb'),
        'rif' => array('application/reginfo+xml'),
        'rip' => array('audio/vnd.rip'),
        'ris' => array('application/x-research-info-systems'),
        'rl' => array('application/resource-lists+xml'),
        'rlc' => array('image/vnd.fujixerox.edmics-rlc'),
        'rld' => array('application/resource-lists-diff+xml'),
        'rm' => array('application/vnd.rn-realmedia', 'audio/x-pn-realaudio'),
        'rmi' => array('audio/midi'),
        'rmm' => array('audio/x-pn-realaudio'),
        'rmp' => array('audio/x-pn-realaudio', 'audio/x-pn-realaudio-plugin'),
        'rms' => array('application/vnd.jcp.javame.midlet-rms'),
        'rmvb' => array('application/vnd.rn-realmedia-vbr'),
        'rnc' => array('application/relax-ng-compact-syntax'),
        'rng' => array('application/ringing-tones', 'application/vnd.nokia.ringing-tone'),
        'rnx' => array('application/vnd.rn-realplayer'),
        'roa' => array('application/rpki-roa'),
        'roff' => array('text/troff'),
        'rp' => array('image/vnd.rn-realpix'),
        'rp9' => array('application/vnd.cloanto.rp9'),
        'rpm' => array('audio/x-pn-realaudio-plugin'),
        'rpss' => array('application/vnd.nokia.radio-presets'),
        'rpst' => array('application/vnd.nokia.radio-preset'),
        'rq' => array('application/sparql-query'),
        'rs' => array('application/rls-services+xml'),
        'rsd' => array('application/rsd+xml'),
        'rss' => array('application/rss+xml'),
        'rt' => array('text/richtext', 'text/vnd.rn-realtext'),
        'rtf' => array('application/rtf', 'application/x-rtf', 'text/richtext'),
        'rtx' => array('application/rtf', 'text/richtext'),
        'rv' => array('video/vnd.rn-realvideo'),
        's' => array('text/x-asm'),
        's3m' => array('audio/s3m'),
        'saf' => array('application/vnd.yamaha.smaf-audio'),
        'saveme' => array('aapplication/octet-stream'),
        'sbk' => array('application/x-tbook'),
        'sbml' => array('application/sbml+xml'),
        'sc' => array('application/vnd.ibm.secure-container'),
        'scd' => array('application/x-msschedule'),
        'scm' => array('application/x-lotusscreencam', 'text/x-script.guile', 'text/x-script.scheme', 'video/x-scm'),
        'scq' => array('application/scvp-cv-request'),
        'scs' => array('application/scvp-cv-response'),
        'scurl' => array('text/vnd.curl.scurl'),
        'sda' => array('application/vnd.stardivision.draw'),
        'sdc' => array('application/vnd.stardivision.calc'),
        'sdd' => array('application/vnd.stardivision.impress'),
        'sdkd' => array('application/vnd.solent.sdkm+xml'),
        'sdkm' => array('application/vnd.solent.sdkm+xml'),
        'sdml' => array('text/plain'),
        'sdp' => array('application/sdp', 'application/x-sdp'),
        'sdr' => array('application/sounder'),
        'sdw' => array('application/vnd.stardivision.writer'),
        'sea' => array('application/sea', 'application/x-sea'),
        'see' => array('application/vnd.seemail'),
        'seed' => array('application/vnd.fdsn.seed'),
        'sema' => array('application/vnd.sema'),
        'semd' => array('application/vnd.semd'),
        'semf' => array('application/vnd.semf'),
        'ser' => array('application/java-serialized-object'),
        'set' => array('application/set'),
        'setpay' => array('application/set-payment-initiation'),
        'setreg' => array('application/set-registration-initiation'),
        'sfd-hdstx' => array('application/vnd.hydrostatix.sof-data'),
        'sfs' => array('application/vnd.spotfire.sfs'),
        'sfv' => array('text/x-sfv'),
        'sgi' => array('image/sgi'),
        'sgl' => array('application/vnd.stardivision.writer-global'),
        'sgm' => array('text/sgml', 'text/x-sgml'),
        'sgml' => array('text/sgml', 'text/x-sgml'),
        'sh' => array('application/x-bsh', 'application/x-sh', 'application/x-shar', 'text/x-script.sh'),
        'shar' => array('application/x-bsh', 'application/x-shar'),
        'shf' => array('application/shf+xml'),
        'shtml' => array('text/html', 'text/x-server-parsed-html'),
        'si' => array('text/vnd.wap.si'),
        'sic' => array('application/vnd.wap.sic'),
        'sid' => array('image/x-mrsid-image'),
        'sig' => array('application/pgp-signature'),
        'sil' => array('audio/silk'),
        'silo' => array('model/mesh'),
        'sis' => array('application/vnd.symbian.install'),
        'sisx' => array('application/vnd.symbian.install'),
        'sit' => array('application/x-sit', 'application/x-stuffit'),
        'sitx' => array('application/x-stuffitx'),
        'skd' => array('application/vnd.koan'),
        'skm' => array('application/vnd.koan'),
        'skp' => array('application/vnd.koan'),
        'skt' => array('application/vnd.koan'),
        'sl' => array('application/x-seelogo'),
        'slc' => array('application/vnd.wap.slc'),
        'sldm' => array('application/vnd.ms-powerpoint.slide.macroenabled.12'),
        'sldx' => array('application/vnd.openxmlformats-officedocument.presentationml.slide'),
        'slt' => array('application/vnd.epson.salt'),
        'sm' => array('application/vnd.stepmania.stepchart'),
        'smf' => array('application/vnd.stardivision.math'),
        'smi' => array('application/smil+xml'),
        'smil' => array('application/smil+xml'),
        'smv' => array('video/x-smv'),
        'smzip' => array('application/vnd.stepmania.package'),
        'snd' => array('audio/basic', 'audio/x-adpcm'),
        'snf' => array('application/x-font-snf'),
        'so' => array('application/octet-stream'),
        'sol' => array('application/solids'),
        'spc' => array('application/x-pkcs7-certificates', 'text/x-speech'),
        'spf' => array('application/vnd.yamaha.smaf-phrase'),
        'spl' => array('application/x-futuresplash'),
        'spot' => array('text/vnd.in3d.spot'),
        'spp' => array('application/scvp-vp-response'),
        'spq' => array('application/scvp-vp-request'),
        'spr' => array('application/x-sprite'),
        'sprite' => array('application/x-sprite'),
        'spx' => array('audio/ogg'),
        'sql' => array('application/x-sql'),
        'src' => array('application/x-wais-source'),
        'srt' => array('application/x-subrip'),
        'sru' => array('application/sru+xml'),
        'srx' => array('application/sparql-results+xml'),
        'ssdl' => array('application/ssdl+xml'),
        'sse' => array('application/vnd.kodak-descriptor'),
        'ssf' => array('application/vnd.epson.ssf'),
        'ssi' => array('text/x-server-parsed-html'),
        'ssm' => array('application/streamingmedia'),
        'ssml' => array('application/ssml+xml'),
        'sst' => array('application/vnd.ms-pki.certstore'),
        'st' => array('application/vnd.sailingtracker.track'),
        'stc' => array('application/vnd.sun.xml.calc.template'),
        'std' => array('application/vnd.sun.xml.draw.template'),
        'step' => array('application/step'),
        'stf' => array('application/vnd.wt.stf'),
        'sti' => array('application/vnd.sun.xml.impress.template'),
        'stk' => array('application/hyperstudio'),
        'stl' => array('application/sla', 'application/vnd.ms-pki.stl', 'application/x-navistyle'),
        'stp' => array('application/step'),
        'str' => array('application/vnd.pg.format'),
        'stw' => array('application/vnd.sun.xml.writer.template'),
        'sub' => array('text/vnd.dvb.subtitle'),
        'sus' => array('application/vnd.sus-calendar'),
        'susp' => array('application/vnd.sus-calendar'),
        'sv4cpio' => array('application/x-sv4cpio'),
        'sv4crc' => array('application/x-sv4crc'),
        'svc' => array('application/vnd.dvb.service'),
        'svd' => array('application/vnd.svd'),
        'svf' => array('image/vnd.dwg', 'image/x-dwg'),
        'svg' => array('image/svg+xml'),
        'svgz' => array('image/svg+xml'),
        'svr' => array('application/x-world', 'x-world/x-svr'),
        'swa' => array('application/x-director'),
        'swf' => array('application/x-shockwave-flash'),
        'swi' => array('application/vnd.aristanetworks.swi'),
        'sxc' => array('application/vnd.sun.xml.calc'),
        'sxd' => array('application/vnd.sun.xml.draw'),
        'sxg' => array('application/vnd.sun.xml.writer.global'),
        'sxi' => array('application/vnd.sun.xml.impress'),
        'sxm' => array('application/vnd.sun.xml.math'),
        'sxw' => array('application/vnd.sun.xml.writer'),
        't' => array('text/troff'),
        't3' => array('application/x-t3vm-image'),
        'taglet' => array('application/vnd.mynfc'),
        'talk' => array('text/x-speech'),
        'tao' => array('application/vnd.tao.intent-module-archive'),
        'tar' => array('application/x-tar'),
        'tbk' => array('application/toolbook', 'application/x-tbook'),
        'tcap' => array('application/vnd.3gpp2.tcap'),
        'tcl' => array('application/x-tcl', 'text/x-script.tcl'),
        'tcsh' => array('text/x-script.tcsh'),
        'teacher' => array('application/vnd.smart.teacher'),
        'tei' => array('application/tei+xml'),
        'teicorpus' => array('application/tei+xml'),
        'tex' => array('application/x-tex'),
        'texi' => array('application/x-texinfo'),
        'texinfo' => array('application/x-texinfo'),
        'text' => array('application/plain', 'text/plain'),
        'tfi' => array('application/thraud+xml'),
        'tfm' => array('application/x-tex-tfm'),
        'tga' => array('image/x-tga'),
        'tgz' => array('application/gnutar', 'application/x-compressed'),
        'thmx' => array('application/vnd.ms-officetheme'),
        'tif' => array('image/tiff', 'image/x-tiff'),
        'tiff' => array('image/tiff', 'image/x-tiff'),
        'tmo' => array('application/vnd.tmobile-livetv'),
        'torrent' => array('application/x-bittorrent'),
        'tpl' => array('application/vnd.groove-tool-template'),
        'tpt' => array('application/vnd.trid.tpt'),
        'tr' => array('text/troff'),
        'tra' => array('application/vnd.trueapp'),
        'trm' => array('application/x-msterminal'),
        'ts' => array('video/MP2T'),
        'tsd' => array('application/timestamped-data'),
        'tsi' => array('audio/tsp-audio'),
        'tsp' => array('application/dsptype', 'audio/tsplayer'),
        'tsv' => array('text/tab-separated-values'),
        'ttc' => array('application/x-font-ttf'),
        'ttf' => array('application/x-font-ttf'),
        'ttl' => array('text/turtle'),
        'turbot' => array('image/florian'),
        'twd' => array('application/vnd.simtech-mindmapper'),
        'twds' => array('application/vnd.simtech-mindmapper'),
        'txd' => array('application/vnd.genomatix.tuxedo'),
        'txf' => array('application/vnd.mobius.txf'),
        'txt' => array('text/plain'),
        'u32' => array('application/x-authorware-bin'),
        'udeb' => array('application/x-debian-package'),
        'ufd' => array('application/vnd.ufdl'),
        'ufdl' => array('application/vnd.ufdl'),
        'uil' => array('text/x-uil'),
        'ulx' => array('application/x-glulx'),
        'umj' => array('application/vnd.umajin'),
        'uni' => array('text/uri-list'),
        'unis' => array('text/uri-list'),
        'unityweb' => array('application/vnd.unity'),
        'unv' => array('application/i-deas'),
        'uoml' => array('application/vnd.uoml+xml'),
        'uri' => array('text/uri-list'),
        'uris' => array('text/uri-list'),
        'urls' => array('text/uri-list'),
        'ustar' => array('application/x-ustar', 'multipart/x-ustar'),
        'utz' => array('application/vnd.uiq.theme'),
        'uu' => array('application/octet-stream', 'text/x-uuencode'),
        'uue' => array('text/x-uuencode'),
        'uva' => array('audio/vnd.dece.audio'),
        'uvd' => array('application/vnd.dece.data'),
        'uvf' => array('application/vnd.dece.data'),
        'uvg' => array('image/vnd.dece.graphic'),
        'uvh' => array('video/vnd.dece.hd'),
        'uvi' => array('image/vnd.dece.graphic'),
        'uvm' => array('video/vnd.dece.mobile'),
        'uvp' => array('video/vnd.dece.pd'),
        'uvs' => array('video/vnd.dece.sd'),
        'uvt' => array('application/vnd.dece.ttml+xml'),
        'uvu' => array('video/vnd.uvvu.mp4'),
        'uvv' => array('video/vnd.dece.video'),
        'uvva' => array('audio/vnd.dece.audio'),
        'uvvd' => array('application/vnd.dece.data'),
        'uvvf' => array('application/vnd.dece.data'),
        'uvvg' => array('image/vnd.dece.graphic'),
        'uvvh' => array('video/vnd.dece.hd'),
        'uvvi' => array('image/vnd.dece.graphic'),
        'uvvm' => array('video/vnd.dece.mobile'),
        'uvvp' => array('video/vnd.dece.pd'),
        'uvvs' => array('video/vnd.dece.sd'),
        'uvvt' => array('application/vnd.dece.ttml+xml'),
        'uvvu' => array('video/vnd.uvvu.mp4'),
        'uvvv' => array('video/vnd.dece.video'),
        'uvvx' => array('application/vnd.dece.unspecified'),
        'uvvz' => array('application/vnd.dece.zip'),
        'uvx' => array('application/vnd.dece.unspecified'),
        'uvz' => array('application/vnd.dece.zip'),
        'vcard' => array('text/vcard'),
        'vcd' => array('application/x-cdlink'),
        'vcf' => array('text/x-vcard'),
        'vcg' => array('application/vnd.groove-vcard'),
        'vcs' => array('text/x-vcalendar'),
        'vcx' => array('application/vnd.vcx'),
        'vda' => array('application/vda'),
        'vdo' => array('video/vdo'),
        'vew' => array('application/groupwise'),
        'vis' => array('application/vnd.visionary'),
        'viv' => array('video/vivo', 'video/vnd.vivo'),
        'vivo' => array('video/vivo', 'video/vnd.vivo'),
        'vmd' => array('application/vocaltec-media-desc'),
        'vmf' => array('application/vocaltec-media-file'),
        'vob' => array('video/x-ms-vob'),
        'voc' => array('audio/voc', 'audio/x-voc'),
        'vor' => array('application/vnd.stardivision.writer'),
        'vos' => array('video/vosaic'),
        'vox' => array('application/x-authorware-bin'),
        'vqe' => array('audio/x-twinvq-plugin'),
        'vqf' => array('audio/x-twinvq'),
        'vql' => array('audio/x-twinvq-plugin'),
        'vrml' => array('application/x-vrml', 'model/vrml', 'x-world/x-vrml'),
        'vrt' => array('x-world/x-vrt'),
        'vsd' => array('application/vnd.visio'),
        'vsf' => array('application/vnd.vsf'),
        'vss' => array('application/vnd.visio'),
        'vst' => array('application/vnd.visio'),
        'vsw' => array('application/vnd.visio'),
        'vtt' => array('text/vtt'),
        'vtu' => array('model/vnd.vtu'),
        'vxml' => array('application/voicexml+xml'),
        'w3d' => array('application/x-director'),
        'w60' => array('application/wordperfect6.0'),
        'w61' => array('application/wordperfect6.1'),
        'w6w' => array('application/msword'),
        'wad' => array('application/x-doom'),
        'wav' => array('audio/wav', 'audio/x-wav'),
        'wax' => array('audio/x-ms-wax'),
        'wb1' => array('application/x-qpro'),
        'wbmp' => array('image/vnd.wap.wbmp'),
        'wbs' => array('application/vnd.criticaltools.wbs+xml'),
        'wbxml' => array('application/vnd.wap.wbxml'),
        'wcm' => array('application/vnd.ms-works'),
        'wdb' => array('application/vnd.ms-works'),
        'wdp' => array('image/vnd.ms-photo'),
        'web' => array('application/vnd.xara'),
        'weba' => array('audio/webm'),
        'webapp' => array('application/x-web-app-manifest+json'),
        'webm' => array('video/webm'),
        'webp' => array('image/webp'),
        'wg' => array('application/vnd.pmi.widget'),
        'wgt' => array('application/widget'),
        'wiz' => array('application/msword'),
        'wk1' => array('application/x-123'),
        'wks' => array('application/vnd.ms-works'),
        'wm' => array('video/x-ms-wm'),
        'wma' => array('audio/x-ms-wma'),
        'wmd' => array('application/x-ms-wmd'),
        'wmf' => array('application/x-msmetafile'),
        'wml' => array('text/vnd.wap.wml'),
        'wmlc' => array('application/vnd.wap.wmlc'),
        'wmls' => array('text/vnd.wap.wmlscript'),
        'wmlsc' => array('application/vnd.wap.wmlscriptc'),
        'wmv' => array('video/x-ms-wmv'),
        'wmx' => array('video/x-ms-wmx'),
        'wmz' => array('application/x-msmetafile'),
        'woff' => array('application/x-font-woff'),
        'word' => array('application/msword'),
        'wp' => array('application/wordperfect'),
        'wp5' => array('application/wordperfect', 'application/wordperfect6.0'),
        'wp6' => array('application/wordperfect'),
        'wpd' => array('application/wordperfect', 'application/x-wpwin'),
        'wpl' => array('application/vnd.ms-wpl'),
        'wps' => array('application/vnd.ms-works'),
        'wq1' => array('application/x-lotus'),
        'wqd' => array('application/vnd.wqd'),
        'wri' => array('application/mswrite', 'application/x-wri'),
        'wrl' => array('application/x-world', 'model/vrml', 'x-world/x-vrml'),
        'wrz' => array('model/vrml', 'x-world/x-vrml'),
        'wsc' => array('text/scriplet'),
        'wsdl' => array('application/wsdl+xml'),
        'wspolicy' => array('application/wspolicy+xml'),
        'wsrc' => array('application/x-wais-source'),
        'wtb' => array('application/vnd.webturbo'),
        'wtk' => array('application/x-wintalk'),
        'wvx' => array('video/x-ms-wvx'),
        'x-png' => array('image/png'),
        'x32' => array('application/x-authorware-bin'),
        'x3d' => array('model/x3d+xml'),
        'x3db' => array('model/x3d+binary'),
        'x3dbz' => array('model/x3d+binary'),
        'x3dv' => array('model/x3d+vrml'),
        'x3dvz' => array('model/x3d+vrml'),
        'x3dz' => array('model/x3d+xml'),
        'xaml' => array('application/xaml+xml'),
        'xap' => array('application/x-silverlight-app'),
        'xar' => array('application/vnd.xara'),
        'xbap' => array('application/x-ms-xbap'),
        'xbd' => array('application/vnd.fujixerox.docuworks.binder'),
        'xbm' => array('image/x-xbitmap', 'image/x-xbm', 'image/xbm'),
        'xdf' => array('application/xcap-diff+xml'),
        'xdm' => array('application/vnd.syncml.dm+xml'),
        'xdp' => array('application/vnd.adobe.xdp+xml'),
        'xdr' => array('video/x-amt-demorun'),
        'xdssc' => array('application/dssc+xml'),
        'xdw' => array('application/vnd.fujixerox.docuworks'),
        'xenc' => array('application/xenc+xml'),
        'xer' => array('application/patch-ops-error+xml'),
        'xfdf' => array('application/vnd.adobe.xfdf'),
        'xfdl' => array('application/vnd.xfdl'),
        'xgz' => array('xgl/drawing'),
        'xht' => array('application/xhtml+xml'),
        'xhtml' => array('application/xhtml+xml'),
        'xhvml' => array('application/xv+xml'),
        'xif' => array('image/vnd.xiff'),
        'xl' => array('application/excel'),
        'xla' => array('application/excel', 'application/x-excel', 'application/x-msexcel'),
        'xlam' => array('application/vnd.ms-excel.addin.macroenabled.12'),
        'xlb' => array('application/excel', 'application/vnd.ms-excel', 'application/x-excel'),
        'xlc' => array('application/excel', 'application/vnd.ms-excel', 'application/x-excel'),
        'xld' => array('application/excel', 'application/x-excel'),
        'xlf' => array('application/x-xliff+xml'),
        'xlk' => array('application/excel', 'application/x-excel'),
        'xll' => array('application/excel', 'application/vnd.ms-excel', 'application/x-excel'),
        'xlm' => array('application/excel', 'application/vnd.ms-excel', 'application/x-excel'),
        'xls' => array('application/excel', 'application/vnd.ms-excel', 'application/x-excel', 'application/x-msexcel'),
        'xlsb' => array('application/vnd.ms-excel.sheet.binary.macroenabled.12'),
        'xlsm' => array('application/vnd.ms-excel.sheet.macroenabled.12'),
        'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'),
        'xlt' => array('application/excel', 'application/x-excel'),
        'xltm' => array('application/vnd.ms-excel.template.macroenabled.12'),
        'xltx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.template'),
        'xlv' => array('application/excel', 'application/x-excel'),
        'xlw' => array('application/excel', 'application/vnd.ms-excel', 'application/x-excel', 'application/x-msexcel'),
        'xm' => array('audio/xm'),
        'xml' => array('application/xml', 'text/xml'),
        'xmz' => array('xgl/movie'),
        'xo' => array('application/vnd.olpc-sugar'),
        'xop' => array('application/xop+xml'),
        'xpdl' => array('application/xml'),
        'xpi' => array('application/x-xpinstall'),
        'xpix' => array('application/x-vnd.ls-xpix'),
        'xpl' => array('application/xproc+xml'),
        'xpm' => array('image/x-xpixmap', 'image/xpm'),
        'xpr' => array('application/vnd.is-xpr'),
        'xps' => array('application/vnd.ms-xpsdocument'),
        'xpw' => array('application/vnd.intercon.formnet'),
        'xpx' => array('application/vnd.intercon.formnet'),
        'xsl' => array('application/xml'),
        'xslt' => array('application/xslt+xml'),
        'xsm' => array('application/vnd.syncml+xml'),
        'xspf' => array('application/xspf+xml'),
        'xsr' => array('video/x-amt-showrun'),
        'xul' => array('application/vnd.mozilla.xul+xml'),
        'xvm' => array('application/xv+xml'),
        'xvml' => array('application/xv+xml'),
        'xwd' => array('image/x-xwd', 'image/x-xwindowdump'),
        'xyz' => array('chemical/x-xyz'),
        'xz' => array('application/x-xz'),
        'yang' => array('application/yang'),
        'yin' => array('application/yin+xml'),
        'z' => array('application/x-compress', 'application/x-compressed'),
        'z1' => array('application/x-zmachine'),
        'z2' => array('application/x-zmachine'),
        'z3' => array('application/x-zmachine'),
        'z4' => array('application/x-zmachine'),
        'z5' => array('application/x-zmachine'),
        'z6' => array('application/x-zmachine'),
        'z7' => array('application/x-zmachine'),
        'z8' => array('application/x-zmachine'),
        'zaz' => array('application/vnd.zzazz.deck+xml'),
        'zip' => array('application/x-compressed', 'application/x-zip-compressed', 'application/zip', 'multipart/x-zip'),
        'zir' => array('application/vnd.zul'),
        'zirz' => array('application/vnd.zul'),
        'zmm' => array('application/vnd.handheld-entertainment+xml'),
        'zoo' => array('application/octet-stream'),
        'zsh' => array('text/x-script.zsh'),
        '123' => array('application/vnd.lotus-1-2-3')
    );

    static function getMimeTypes(string $ext = '')
    {
        if ($ext == '*' || $ext == '') {
            $all = [];
            foreach (self::$mime_types as $mimeType) {
                $all = array_merge($all, $mimeType);
            }
            return $all;
        }
        return self::$mime_types[$ext] ?? [];
    }
}
